home *** CD-ROM | disk | FTP | other *** search
/ JCSM Shareware Collection 1993 November / JCSM Shareware Collection - 1993-11.iso / cl720 / fast278j.lzh / SPD.F < prev    next >
Text File  |  1980-01-01  |  3KB  |  189 lines

  1. ;
  2. ;FAST SPRITE DESIGNER. FAST V1.4+
  3. ;
  4. ;
  5. ;Edits files of format "end,repeat[width,height,data]"
  6. ;
  7. ;
  8.  
  9. var sp,x,y,ea,height,width
  10.  
  11. proc psprite(spn,spaddr)
  12.     {
  13.     sx=spn and 7
  14.     sy=spn/8
  15.     sprite sx*80,sy*40+30,sp|spaddr
  16.     }
  17.  
  18. function advance(adv)
  19.     {
  20.     return 2+adv+(peekb adv)*2*peekb (adv+1)
  21.     }
  22.  
  23. proc abort
  24.     {
  25.     screen 3
  26.     print bios "Save? ";
  27.     wait_abort:
  28.     k=lcase key
  29.     if k='n' then terminate
  30.     if k<>'y' then goto wait_abort
  31.     save_again:
  32.     save file+2,sp|0,sp[0]
  33.     if error then
  34.     {
  35.     print bios "Save error, R to retry.":beep
  36.     wait for keyscan
  37.     if (ucase key)='R' then goto save_again
  38.     }
  39.     terminate
  40.     }
  41.  
  42. proc clear_bot
  43.     {
  44.     colour 0:cls
  45.     cursor 0,0:print bios "Sprite file: ";
  46.     m=file+2:while peekb m print bios chr peek m;:m++
  47.     print bios cr lf "Memory available = ";65535-sp[0]
  48.     }
  49.  
  50. proc put(px,py)
  51.     {
  52.     mode 640,and
  53.     colour 1
  54.     plot 500+px,50+py
  55.     bx=40+px*4
  56.     by=40+py*4
  57.     for pa=0 to 3
  58.     for pb=0 to 3
  59.       plot bx+pb,by+pa
  60.     next pb,pa
  61.     }
  62.  
  63. proc display
  64.     {
  65.     m=ea+2
  66.     for y=0 to height-1
  67.     for x=0 to width-1
  68.       b=sp[m]:m+=2
  69.       bit=32768
  70.       for bx=0 to 15
  71.     if b and bit then put(x*16+bx,y)
  72.     bit=rrightz bit
  73.       next bx
  74.     next x,y
  75.     }
  76.  
  77. proc edit(ea)
  78.     {
  79.     if ea>=sp[0] then
  80.     {
  81.     clear_bot
  82.     tryw:
  83.     cursor 5,0:print bios "Width: (1-4) ";
  84.     width=inputb:if not width then return
  85.     if width above 4 then goto tryw
  86.  
  87.     tryh:
  88.     cursor 7,0:print bios cr lf "Height: (1-32) ";
  89.     height=inputb:if not height then goto tryw
  90.     if height above 32 then goto tryh
  91.  
  92.     sp[ea]b=width
  93.     sp[ea+1]b=height
  94.     fill width*height from sp|ea+2 with 0
  95.     sp[0]+=2+width*height*2
  96.     }
  97.     else
  98.     {
  99.     width=sp[ea]b
  100.     height=sp[ea+1]b
  101.     }
  102.     clear_bot
  103.  
  104.     mode 640,and
  105.     display
  106.  
  107.     x=0:y=0
  108.  
  109.     eloop:
  110.     s=scan
  111.     if s=1 then goto xedit
  112.  
  113.     goto eloop
  114.  
  115.     xedit:
  116.     }
  117.  
  118. sp=allocate 4096:if error then beep:terminate
  119.  
  120. print bios "Sprite file: ";
  121. inputs file
  122. if peekb (file+2)=13 then terminate
  123. asciiz file
  124. print bios
  125.  
  126. open #1,file+2
  127. if error then create #1,file+2:if error then error 100
  128. sp[0]=2
  129. read_len=read #1,65535 to sp|0
  130. close #1:if error then error 101
  131.  
  132. screen 6
  133.  
  134. start:
  135. colour 0:cls
  136. sbase=2
  137.  
  138. next_page:
  139. seln=0
  140. redisplay:
  141. clear_bot
  142. mode 640,and
  143.  
  144. addr=sbase
  145. for sn=0 to 31
  146. if addr>=sp[0] then goto selct
  147. psprite(sn,addr)
  148. addr=advance(addr)
  149. next sn
  150. sn--
  151.  
  152. selct:
  153. addr=sbase
  154. if seln then repeat seln addr=advance(addr)
  155. mode 640,xor
  156. if addr<sp[0] then
  157.     {
  158.     psprite(seln,addr)
  159.     psprite(seln,addr)
  160.     }
  161. s=scan
  162. if s=1 then abort
  163. if s=81 then
  164.     {
  165.     if sn=31
  166.       then repeat 32 sbase=advance(sbase)
  167.       else sbase=2
  168.     goto next_page
  169.     }
  170. if s=75 then seln--
  171. if s=77 then seln++
  172. if s=72 then seln-=4
  173. if s=80 then seln+=4
  174. if s=71 then seln=0
  175. if seln>sn then seln=sn
  176. if seln<0 then seln=0
  177. if s=28 then edit(addr):goto redisplay
  178. if s=30 then edit(sp[0]):goto redisplay
  179. if s=32 then
  180.     {
  181.  
  182.     goto start
  183.     }
  184. goto selct
  185.  
  186.  
  187. file:
  188. string 30
  189.